package com.feihong.txgw.inter.contract.shopcar;

import com.feihong.txgw.json.goodsCart.GoodsCartParser;
import com.feihong.txgw.json.goodsCart.TerminalListParser;
import com.feihong.txgw.ui.mvp.model.IBaseModel;
import com.feihong.txgw.ui.mvp.precenter.AbBasePrecenter;
import com.feihong.txgw.ui.mvp.view.IBaseFragment;
import com.feihong.txgw.model.greendao.ShopCarGoodsModel;
import com.feihong.txgw.shopcar.bean.TerminalEntiyt;
import com.feihong.txgw.shopcar.listener.OnShopEditListener;

import java.util.List;

import io.reactivex.Observable;

/**
 * @author wangziheng
 * @name TestPro
 * @class name：com.feihong.txgw.contract.shopcar
 * @class describe:
 * @time 2018/4/30 12:38
 * @change
 * @chang time
 */

public interface IShopCarContract {
    abstract class AbShopCarMainPrecenter extends AbBasePrecenter<IShopCarMainModel, IShopCarMainView> {

        public abstract void loadRecommentGoods();

        public abstract void editShopCarGoodsToService(final List<ShopCarGoodsModel> changeGoodsList);

        public abstract void editShopCarGoodsToLocal(String editType, List<ShopCarGoodsModel> changeGoodsList);

        public abstract boolean getShopCarGoodsFromLocal();
    }

    interface IShopCarMainModel extends IBaseModel {
        /**
         * 获取购物车推荐商品数据
         */
        Observable<TerminalListParser> getRecommendGoods();

        /**
         * 购物车商品编辑处理(已登录)  并同步服务器
         *
         * @param onShopEditListener
         * @param changeGoodsList    编辑过的商品集
         */
        Observable<GoodsCartParser> editShopCarGoodsToService(List<ShopCarGoodsModel> changeGoodsList, OnShopEditListener onShopEditListener);

        /**
         * 购物车商品编辑处理 （未登录） 并同步到本地
         *
         * @param changeGoodsList    编辑过的商品集
         * @param editType           操作类型 update 商品数量变化  del  批量删除本地商品
         */
        Observable editShopCarGoodsToLocal(String editType, List<ShopCarGoodsModel> changeGoodsList);


    }

    interface IShopCarMainView extends IBaseFragment {

        /**
         * 展示加载动画
         */
        void showLoading();

        /**
         * 隐藏加载动画
         */

        void hideLoading();

        /**
         * 刷新适配器
         * @param goodsEntities
         */
        void notifyAdapter(List<ShopCarGoodsModel> goodsEntities);
        /**
         * 计算商品价格
         */
        void AccountPrice();
        /**
         *  购物车为空状态下
         *      获取推荐商品数据
         */
        void getShopCarRecommendGoods();
        /**
         * * 购物车为空状态下
         *      设置推荐商品集合
         * @param goodsEntities
         */
        void setShopCarRecommendGoods(List<TerminalEntiyt> goodsEntities);

        /**
         * 请求失败失败弹窗
         * @param failReason  失败原因
         */
        void showErrorDialog(String failReason);

        /**
         * 网络连接异常
         */
        void showNetErrorLayout();

        /**
         * set订单信息
         * @param orderInfo
         */
        @Deprecated
        void setOrderInfo(String orderInfo);

    }
}
